<?php
/* vim: set expandtab sw=2 sts=2 ts=2 tw=150 nu: */

App::uses('AppController', 'Controller');

/**
 * Pessoas Controller
 *
 * {@inheritdoc}
 */
class PessoasController extends AppController {

/**
 *
 */
  public $helpers = array('Paginator');

  // {{{ Cake Callbacks

  public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('adicionar', 'logout');
  }

  // }}}

/**
 *
 */
  public function index() {
    $this->Pessoa->recursive = 0;
    $this->set('pessoas', $this->paginate());
  }

  /**
   *
   * Enter description here ...
   * @throws BadRequestException
   */
  public function adicionar() {
    if ($this->request->is('post')) {
      if ($this->RequestHandler->isAjax()) {
        $this->autoRender = false;
        $resposta = array(
                "mensagem" => "",
                "sucesso"  => false,
        );
        $this->Pessoa->begin();
        if ($this->Pessoa->save($this->request->data)) {
          $this->Pessoa->commit();
          $mensagem = "Seu cadastro foi realizado com sucesso.";
          $resposta["sucesso"] = true;
        } else {
          $this->Pessoa->rollback();
          if (!empty($this->Pessoa->validationErrors)) {
            $mensagem = "Há campos obrigatórios que não foram preenchidos ou o valor informado é inválido.";
            $resposta["campos"] = $this->Pessoa->validationErrors;
            // {{{ Formata array com as mensagens de validação dos campos com erro.
            $campos = array();
            $valores = array();
            foreach ($resposta["campos"] as $campo => $valor) {
              array_push($campos, "data[" . $this->Pessoa->alias . "][" . $campo . "]");
              array_push($valores, $valor[0]);
            }
            // }}}
            $resposta["campos"] = array_combine($campos, $valores);
          } else {
            $mensagem = "Não foi possível salvar o contato.";
          }
        }
        //
        $this->_instanciarClasseDeVisualizacao();
        $resposta["mensagem"] = $this->View->element("mensagens", array(
          "classe"        => ($resposta["sucesso"] == true ? "alert alert-success" : "alert alert-error"),
          "tipo_mensagem" => ($resposta["sucesso"] == true ? "Sucesso" : "Erro"),
          "mensagem"      => $mensagem));
        echo json_encode($resposta);
      } else {
        throw new BadRequestException();
      }
    }
  }

  public function login() {
    if ($this->request->is('post')) {
      $this->autoRender = false;
      $resposta = array(
        "mensagem" => "",
        "sucesso" => false,
      );
      if ($this->Auth->login()) {
        $mensagem = "Login efetuado com sucesso.";
        $resposta["urlRedirecionamento"] = $this->Auth->redirect();
        $resposta["usuario"] = $this->Auth->user("Pessoa");
        $resposta["usuario"] = $resposta["usuario"]["email"];
        $resposta["sucesso"] = true;
      } else {
        $mensagem = "O e-mail e/ou senha informados são inválidos, tente novamente.";
        $resposta["urlRedirecionamento"] = "";
        $resposta["usuario"] = "";
        $resposta["sucesso"] = false;
      }
      //
      $this->_instanciarClasseDeVisualizacao();
      $resposta["mensagem"] = $this->View->element("mensagens",
        array(
          "classe" => ($resposta["sucesso"] == true ? "alert alert-success" : "alert alert-error"),
          "tipo_mensagem" => ($resposta["sucesso"] == true ? "Sucesso" : "Erro"),
          "mensagem" => $mensagem
        )
      );
      echo json_encode($resposta);
    }
  }

  public function logout() {
    $this->redirect($this->Auth->logout());
  }

  public function recuperarSenha() {
    ;
  }
}
